package com.lxx.jmb2c.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

/**
 * 密码编码配置类
 * 
 * 这个类配置了Spring Security的密码编码器，用于：
 * 1. 用户注册时加密密码
 * 2. 用户登录时验证密码
 * 
 * 为什么要加密密码：
 * - 防止明文密码泄露
 * - 即使数据库被泄露，攻击者也无法直接获取用户密码
 * - 符合安全最佳实践
 * 
 * 初学者需要了解：
 * - @Configuration 表示这是一个配置类
 * - @Bean 表示这个方法返回的对象会被Spring容器管理
 * - BCryptPasswordEncoder是目前最推荐的密码编码器
 * 
 * 安全最佳实践：
 * 1. 永远不要存储明文密码
 * 2. 使用强密码策略(长度、复杂度)
 * 3. 定期检查密码哈希强度
 * 
 * 使用示例：
 * // 注入密码编码器
 * @Autowired
 * private BCryptPasswordEncoder passwordEncoder;
 * 
 * // 加密密码
 * String encodedPassword = passwordEncoder.encode(rawPassword);
 * 
 * // 验证密码
 * boolean matches = passwordEncoder.matches(rawPassword, encodedPassword);
 * 
 * @author lxx
 * @since 2025-07-02
 */
@Configuration
public class PasswordConfig {
    /**
     * 配置BCrypt密码编码器
     * 
     * BCrypt特点：
     * - 自动加盐(salt)，防止彩虹表攻击
     * - 可配置计算强度(默认10)
     * - 慢哈希算法，增加暴力破解难度
     * 
     * @return BCryptPasswordEncoder实例
     */
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
